package com.midea.exam;

/**
 * @description： 1、如果程序是从try代码块或者catch代码块中返回时，finally中的代码总会执行。而且finally语句在return语句执行之后return返回之前执行的
 * 2、如果try和catch的return是一个变量时且函数的是从其中一个返回时，后面finally中语句即使有对返回的变量进行赋值的操作时，也不会影响返回的值。
 * 3、我们可以看到当finally有返回值时，会直接返回。不会再去返回try或者catch中的返回值。
 * @author: wangwl23
 * @create: 2021-08-18 14:43
 */
public class TryCatchDemo {

    public int calculate(String code) {

        int val;
        try {
            val = 0;
            if ("err".equals(code)) {
                throw new RuntimeException("Invalid");
            } else {
                val = 1;
                return val;
            }
        } catch (Exception e) {
            val = 2;
            return val;
        } finally {
            System.out.print("重新给val赋值");
            val = 3;
        }
    }

    public static void main(String[] args) {

        TryCatchDemo demo = new TryCatchDemo();
        System.out.println(demo.calculate("err"));
        System.out.println(demo.calculate("right"));

    }

}
